<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Integer 整型</title>
</head>
<div id="layout">
  <div id="layout-content"><div id="language.types.integer" class="sect1">
 <h2 class="title">Integer 整型</h2>
 
 <p class="simpara">
   <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某个数。
 </p>
  
 <p class="para">
  参见：
 </p>

 <ul class="itemizedlist">
  <li class="listitem">
   <span class="simpara">
    <a href="book.gmp.html" class="link">任意长度整数／GMP</a>
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <a href="language.types.float.html" class="link">浮点型</a>
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <a href="book.bc.html" class="link">任意精度数学库／BCMath</a>
   </span>
  </li>
 </ul>

 <div class="sect2" id="language.types.integer.syntax">
  <h3 class="title">语法</h3>

  <p class="simpara">
   整型值可以使用十进制，十六进制，八进制或二进制表示，前面可以加上可选的符号（- 或者 +）。
  </p>

  <p class="para">
   二进制表达的 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 自 PHP 5.4.0 起可用。
  </p>
  <p class="para">
   要使用八进制表达，数字前必须加上
   <em>0</em>（零）。要使用十六进制表达，数字前必须加上
   <em>0x</em>。要使用二进制表达，数字前必须加上
   <em>0b</em>。
  </p>

  <div class="example" id="example-58">
   <p><strong>Example #1 整数文字表达</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1234</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;十进制数<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;-</span><span style="color: #0000BB">123</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;负数<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0123</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;八进制数&nbsp;(等于十进制&nbsp;83)<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0x1A</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;十六进制数&nbsp;(等于十进制&nbsp;26)<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0b11111111</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;二进制数字&nbsp;(等于十进制&nbsp;255)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <p class="para">
   <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 语法的结构形式是：
  </p>
 
  <div class="informalexample">
   <div class="example-contents">
<div class="cdata"><pre>
decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

binary      : 0b[01]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary
</pre></div>
   </div>

  </div>

  <p class="para">
   整型数的字长和平台有关，尽管通常最大值是大约二十亿（32 位有符号）。64
   位平台下的最大值通常是大约 9E18，除了 Windows 下 PHP 7 以前的版本，总是 32 位的。
   
   PHP 不支持无符号的 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>。<span class="type"><a href="language.types.integer.html" class="type Integer">Integer</a></span> 值的字长可以用常量
   <strong><code>PHP_INT_SIZE</code></strong>来表示，自
   PHP 4.4.0 和 PHP 5.0.5后，最大值可以用常量 <strong><code>PHP_INT_MAX</code></strong> 来表示，最小值可以在 PHP 7.0.0 及以后的版本中用常量 <strong><code>PHP_INT_MIN</code></strong> 表示。
  </p>

  <div class="warning"><strong class="warning">Warning</strong>
   <p class="para">
    PHP 7 以前的版本里，如果向八进制数传递了一个非法数字（即 8 或 9），则后面其余数字会被忽略。PHP 7 以后，会产生 Parse Error。
   </p>
  </div>
 </div>

 <div class="sect2" id="language.types.integer.overflow">
  <h3 class="title">整数溢出</h3>

  <p class="para">
   如果给定的一个数超出了 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 的范围，将会被解释为
   <span class="type"><a href="language.types.float.html" class="type float">float</a></span>。同样如果执行的运算结果超出了
   <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 范围，也会返回 <span class="type"><a href="language.types.float.html" class="type float">float</a></span>。
  </p>

  <div class="example" id="example-59">
   <p><strong>Example #2 32 位系统下的整数溢出</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2147483647</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;int(2147483647)<br /><br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2147483648</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(2147483648)<br /><br /></span><span style="color: #0000BB">$million&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000000</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;&nbsp;</span><span style="color: #0000BB">50000&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$million</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(50000000000)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <div class="example" id="example-60">
   <p><strong>Example #3 64 位系统下的整数溢出</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9223372036854775807</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;int(9223372036854775807)<br /><br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9223372036854775808</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(9.2233720368548E+18)<br /><br /></span><span style="color: #0000BB">$million&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000000</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;&nbsp;</span><span style="color: #0000BB">50000000000000&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$million</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(5.0E+19)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <p class="para">
   PHP 中没有整除的运算符。<em>1/2</em> 产生出 <span class="type"><a href="language.types.float.html" class="type float">float</a></span>
   <em>0.5</em>。
   值可以舍弃小数部分，强制转换为 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>，或者使用
   <span class="function"><a href="round.html" class="function">round()</a></span> 函数可以更好地进行四舍五入。
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(3.5714285714286)&nbsp;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((int)&nbsp;(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;int(3)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">round</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">));&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(4)&nbsp;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="language.types.integer.casting">
  <h3 class="title">转换为整型</h3>

  <p class="simpara">
   要明确地将一个值转换为 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>，用 <em>(int)</em> 或
   <em>(integer)</em> 强制转换。不过大多数情况下都不需要强制转换，因为当运算符，函数或流程控制需要一个
   <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 参数时，值会自动转换。还可以通过函数
   <span class="function"><a href="intval.html" class="function">intval()</a></span> 来将一个值转换成整型。
  </p>

  <p class="simpara">
   将 <span class="type"><a href="language.types.resource.html" class="type resource">resource</a></span> 转换成 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 时，
   结果会是 PHP 运行时为 <span class="type"><a href="language.types.resource.html" class="type resource">resource</a></span> 分配的唯一资源号。
  </p>

  <p class="simpara">
   参见：<a href="language.types.type-juggling.html" class="link">类型转换的判别</a>。
  </p>
   
  <div class="sect3" id="language.types.integer.casting.from-boolean">
   <h4 class="title">从<a href="language.types.boolean.html" class="link">布尔值</a>转换</h4>

   <p class="simpara">
    <strong><code>FALSE</code></strong> 将产生出 <em>0</em>（零），<strong><code>TRUE</code></strong> 将产生出
    <em>1</em>（壹）。
   </p>
  </div>

  <div class="sect3" id="language.types.integer.casting.from-float">
   <h4 class="title">
    从<a href="language.types.float.html" class="link">浮点型</a>转换
   </h4> 

   <p class="simpara">
    当从浮点数转换成整数时，将<em class="emphasis">向下</em>取整。
   </p>
    
   <p class="para">
    如果浮点数超出了整数范围（32 位平台下通常为
    <em>+/- 2.15e+9 = 2^31</em>，64 位平台下，除了 Windows，通常为
    <em>+/- 9.22e+18 = 2^63</em>），则结果为未定义，因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告，甚至没有任何通知！
   </p>

   <blockquote class="note"><p><strong class="note">Note</strong>: 
    <p class="para">
     PHP 7.0.0 起，NaN 和 Infinity 在转换成 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span> 时，不再是 undefined 或者依赖于平台，而是都会变成零。
    </p>
   </p></blockquote>
    
   <div class="warning"><strong class="warning">Warning</strong>
    <p class="para">
     绝不要将未知的分数强制转换为 <span class="type"><a href="language.types.integer.html" class="type integer">integer</a></span>，这样有时会导致不可预料的结果。
    </p>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo&nbsp;(int)&nbsp;(&nbsp;(</span><span style="color: #0000BB">0.1</span><span style="color: #007700">+</span><span style="color: #0000BB">0.7</span><span style="color: #007700">)&nbsp;*&nbsp;</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;显示&nbsp;7!<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
    
    <p class="para">
     参见<a href="language.types.float.html#warn.float-precision" class="link">关于浮点数精度的警告</a>。
    </p>
   </div>
  </div>
   
  <div class="sect3" id="language.types.integer.casting.from-string">
   <h4 class="title">从字符串转换</h4>

   <p class="simpara">
    参见<a href="language.types.string.html#language.types.string.conversion" class="link">字符串转换为数值</a>。
   </p>
  </div>
   
  <div class="sect3" id="language.types.integer.casting.from-other">
   <h4 class="title">从其它类型转换</h4>

   <div class="caution"><strong class="caution">Caution</strong>
    <p class="simpara">
     没有定义从其它类型转换为整型的行为。<em class="emphasis">不要</em>依赖任何现有的行为，因为它会未加通知地改变。
    </p>
   </div>
  </div>

 </div>
</div></div></div></body></html>